﻿// using System.Collections;
// using System.Collections.Generic;
// using UnityEngine;
// using UnityEditor;
//
// /// <summary>
// /// 复合行为编辑器 - 为CompositeBehavior提供自定义的Inspector界面
// /// 允许在编辑器中动态添加/删除行为，并设置对应的权重
// /// </summary>
// [CustomEditor(typeof(CompositeBehavior))]
// public class CompositeBehaviorEditor : Editor
// {
//     /// <summary>
//     /// 绘制自定义的Inspector界面
//     /// 显示行为列表和权重设置，提供添加/删除功能
//     /// </summary>
//     public override void OnInspectorGUI()
//     {
//         // 获取目标CompositeBehavior对象
//         CompositeBehavior cb = (CompositeBehavior)target;
//
//         // 开始水平布局
//         Rect r = EditorGUILayout.BeginHorizontal();
//         r.height = EditorGUIUtility.singleLineHeight;
//
//         // 检查行为数组是否为空
//         if (cb.behaviors == null || cb.behaviors.Length == 0)
//         {
//             // 显示警告信息
//             EditorGUILayout.HelpBox("No behaviors in array.", MessageType.Warning);
//             EditorGUILayout.EndHorizontal();
//             r = EditorGUILayout.BeginHorizontal();
//             r.height = EditorGUIUtility.singleLineHeight;
//         }
//         else
//         {
//             // 绘制表头
//             r.x = 30f;
//             r.width = EditorGUIUtility.currentViewWidth - 95f;
//             EditorGUI.LabelField(r, "Behaviors");
//             r.x = EditorGUIUtility.currentViewWidth - 65f;
//             r.width = 60f;
//             EditorGUI.LabelField(r, "Weights");
//             r.y += EditorGUIUtility.singleLineHeight * 1.2f;
//
//             // 开始检查更改
//             EditorGUI.BeginChangeCheck();
//             
//             // 绘制每个行为和对应的权重
//             for (int i = 0; i < cb.behaviors.Length; i++)
//             {
//                 // 绘制索引标签
//                 r.x = 5f;
//                 r.width = 20f;
//                 EditorGUI.LabelField(r, i.ToString());
//                 
//                 // 绘制行为对象字段
//                 r.x = 30f;
//                 r.width = EditorGUIUtility.currentViewWidth - 95f;
//                 cb.behaviors[i] = (FlockBehavior)EditorGUI.ObjectField(r, cb.behaviors[i], typeof(FlockBehavior), false);
//                 
//                 // 绘制权重浮点数字段
//                 r.x = EditorGUIUtility.currentViewWidth - 65f;
//                 r.width = 60f;
//                 cb.weights[i] = EditorGUI.FloatField(r, cb.weights[i]);
//                 r.y += EditorGUIUtility.singleLineHeight * 1.1f;
//             }
//             
//             // 如果有更改，标记对象为脏数据
//             if (EditorGUI.EndChangeCheck())
//             {
//                 EditorUtility.SetDirty(cb);
//             }
//         }
//
//         EditorGUILayout.EndHorizontal();
//         
//         // 绘制添加行为按钮
//         r.x = 5f;
//         r.width = EditorGUIUtility.currentViewWidth - 10f;
//         r.y += EditorGUIUtility.singleLineHeight * 0.5f;
//         if (GUI.Button(r, "Add Behavior"))
//         {
//             AddBehavior(cb);
//             EditorUtility.SetDirty(cb);
//         }
//
//         // 绘制删除行为按钮（仅在存在行为时显示）
//         r.y += EditorGUIUtility.singleLineHeight * 1.5f;
//         if (cb.behaviors != null && cb.behaviors.Length > 0)
//         {
//             if (GUI.Button(r, "Remove Behavior"))
//             {
//                 RemoveBehavior(cb);
//                 EditorUtility.SetDirty(cb);
//             }
//         }
//     }
//
//     /// <summary>
//     /// 添加新的行为到复合行为中
//     /// 扩展行为数组和权重数组，新行为的默认权重为1.0
//     /// </summary>
//     /// <param name="cb">要修改的复合行为对象</param>
//     void AddBehavior(CompositeBehavior cb)
//     {
//         Debug.Log("Add Behavior");
//         int oldCount = (cb.behaviors != null) ? cb.behaviors.Length : 0;
//         FlockBehavior[] newBehaviors = new FlockBehavior[oldCount + 1];
//         float[] newWeights = new float[oldCount + 1];
//         
//         // 复制现有数据
//         for (int i = 0; i < oldCount; i++)
//         {
//             newBehaviors[i] = cb.behaviors[i];
//             newWeights[i] = cb.weights[i];
//         }
//         
//         // 设置新行为的默认权重
//         newWeights[oldCount] = 1f;
//         
//         // 更新数组引用
//         cb.behaviors = newBehaviors;
//         cb.weights = newWeights;
//     }
//
//     /// <summary>
//     /// 从复合行为中移除最后一个行为
//     /// 如果只有一个行为，则清空数组
//     /// </summary>
//     /// <param name="cb">要修改的复合行为对象</param>
//     void RemoveBehavior(CompositeBehavior cb)
//     {
//         int oldCount = cb.behaviors.Length;
//         
//         // 如果只有一个行为，清空数组
//         if (oldCount == 1)
//         {
//             cb.behaviors = null;
//             cb.weights = null;
//             return;
//         }
//         
//         // 创建新的数组，移除最后一个元素
//         FlockBehavior[] newBehaviors = new FlockBehavior[oldCount - 1];
//         float[] newWeights = new float[oldCount - 1];
//         
//         // 复制除了最后一个元素的所有数据
//         for (int i = 0; i < oldCount - 1; i++)
//         {
//             newBehaviors[i] = cb.behaviors[i];
//             newWeights[i] = cb.weights[i];
//         }
//         
//         // 更新数组引用
//         cb.behaviors = newBehaviors;
//         cb.weights = newWeights;
//     }
// }
